#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cassert>

using std::cin;
using std::cout;
using std::vector;

template<typename Iter, typename Comp>
Iter Merge(Iter begin1, Iter end1, Iter begin2, Iter end2, Iter out, Comp cmp) {
	while (begin1 != end1 && begin2 != end2) {
		if (cmp(*begin1, *begin2)) {
			*out = *begin1;
			++begin1;
			++out;
		}
		else {
			*out = *begin2;
			++begin2;
			++out;
		}
	}
	if (begin2 == end2) {
		while (begin1 != end1) {
			*out = *begin1;
			++begin1;
			++out;
		}
	}
	else {
		while (begin2 != end2) {
			*out = *begin2;
			++begin2;
			++out;
		}
	}
	return out;
}

template<typename Iter, typename Comp>
void Sort(Iter begin, Iter end, Comp cmp) {
	size_t size = std::distance(begin, end);
	if (size <= 1) {
		return;
	}
	Iter middle = begin;
	std::advance(middle, size / 2);
	Sort(begin, middle, cmp);
	Sort(middle, end, cmp);
	vector<typename std::iterator_traits<Iter>::value_type> for_merge(size);
	Merge(begin, middle, middle, end, for_merge.begin(), cmp);
	std::copy(for_merge.begin(), for_merge.end(), begin);
}

template<typename T>
void Input(std::istream &input, vector<T> &sequence) {
	size_t size;
	input >> size;
	sequence.resize(size);
	for (size_t index = 0; index < size; ++index) {
		input >> sequence[index];
	}
}

template<typename T>
void Output(std::ostream &output, vector<T> &sequence) {
	for (size_t index = 0; index < sequence.size(); ++index) {
		output << sequence[index] << " ";
	}
}

int main() {
	vector<int> sequence;
	Input(cin, sequence);
	Sort(sequence.begin(), sequence.end(), std::less<int>());
	Output(cout, sequence);
}
